#pragma once

#include "struct.h"
#include "Regex.h"

namespace etel{
	class Factory{
		SINGLETON(Factory);
	public:
		Regex* PRODUCE_REGEX(prdRegex);
	};

	class FactoryRegex:public Factory{
		SINGLETON(FactoryRegex);
	public:
		CodeType PRODUCE_REGEX_A(prdString);

		RString* PRODUCE_REGEX_A(prdRString);
		RAnyChar* PRODUCE_REGEX_A(prdRAnyChar);
		CodeUnitType PRODUCE_REGEX_A(FactoryRegex::prdChar);
		RCharRange* PRODUCE_REGEX_A(prdRCharRange);
		RReference* PRODUCE_REGEX(prdRReference);
	};

	/*class FactoryRegex:public Factory{
		SINGLETON(FactoryRegex)
	public:
		
		virtual RUnit* prdRUnit(RUnit*);
		virtual RComplex* prdRComplex(RComplex*);
	};

	class FactoryRUnit:public Factory*/

	/*class Factory{
		SINGLETON(Factory)
	public:
		CodeType PRODUCE_REGEX(prdString);

		RString* PRODUCE_REGEX(prdRString);
		RAnyChar* PRODUCE_REGEX(prdRAnyChar);
		RCharRange* PRODUCE_REGEX(prdRCharRange);
		RReference* PRODUCE_REGEX(prdRReference);
	};*/
}